/*  -------------------------- (C) COPYRIGHT 2022 Fortiortech ShenZhen ---------------------------*/
/**
 * @copyright (C) COPYRIGHT 2022 Fortiortech Shenzhen
 * @file      xxx.c
 * @author    Fortiortech  Appliction Team
 * @since     Create:2022-09-12
 * @date      Last modify:2022-09-14
 * @note      Last modify author is Leo.li
 * @brief
 */
 
#include "UART.h"
#include "FU68xx_4_MCU.h"

MCUART  Uart;

 /**
	* @function     UART1_Init
	* @brief        UART1初始化配置
	*/
void UART_Init(void)
{
	P3_OE |= P37;                 //设置IO口P05为输出
	P3_PU |= P37;                 //设置IO口P05为输出上拉
	P3_OE &= ~P36;                //设置IO口P06为输入
	P3_PU |= P36;  	              //设置IO口P06为输入上拉
 /**
	********************************************************************************************
	*	UART1使能
	*	  SetBit(PH_SEL, UART1EN)：使能UART1
	*	  ClrBit(PH_SEL, UART1EN)：不使能UART1
	********************************************************************************************
 	*/	
	SetBit(PH_SEL, UART2EN);      //使能串口

 /**
	********************************************************************************************
	*	UART1模式选择
	*	00：模式0
	*	01：模式1，8bit uart(波特率可设置)
	*	10：模式2
	* 11：模式3
	********************************************************************************************
	*/
	ClrBit(UT2_CR, UT2MOD1);
	SetBit(UT2_CR, UT2MOD0);                     //MODE1:8bit波特率可变UART模式

 /**
	********************************************************************************************
	*	单机通讯和多机通讯选择
	*	  0：单机通讯
	*	  1：多机通讯
	********************************************************************************************
 	*/
	ClrBit(UT2_CR, UT2SM2);                      //禁止Mode2和Mode3多机通讯

 /**
	********************************************************************************************
	*	串行输入使能
	*	  0：不允许串行输入
	*	  1：允许串行输入
	********************************************************************************************
 	*/
	SetBit(UT2_CR, UT2REN);                      //使能接收

 /**
	********************************************************************************************
	*	模式2/3下数据发送第9位，在多机通信中，可用于判断当前数据帧的数据是地址还是数据
	*	  0：当前数据帧为数据
	*	  1：当前数据帧为地址
	********************************************************************************************
 	*/
	ClrBit(UT2_CR, UT2TB8);

 /**
	********************************************************************************************
	*	模式2/3下数据发送第9位，在多机通信中，可用于判断当前数据帧的数据是地址还是数据
	*	  0：当前数据帧为数据
	*	  1：当前数据帧为地址
	********************************************************************************************
 	*/
	ClrBit(UT2_CR, UT2RB8);

 /**
	********************************************************************************************
	*	UART中断使能
	*	  0：不使能UART中断
	*	  1：使能UART中断
	********************************************************************************************
 	*/
	ClrBit(UT2_BAUD, UART2IEN);                      //先关中断

 /**
	********************************************************************************************
	*	UART中断优先级
	*	 00：中断优先级0
	*	 01：中断优先级1
	*  10：中断优先级2
	*  11：中断优先级3
	********************************************************************************************
 	*/
	ClrBit(IP3, PSPI_UT21);                 //中断优先级最低
	ClrBit(IP3, PSPI_UT20);

 /**
	********************************************************************************************
	*	UART1倍频使能
	*	  SetBit(UT_BAUD, UART_2xBAUD)：使能倍频
	*	  ClrBit(UT_BAUD, UART_2xBAUD)：不使能倍频
	********************************************************************************************
 	*/
	ClrBit(UT2_BAUD, BAUD2_SEL);

 /**
	********************************************************************************************
	*	UART2波特率设置:fcpu_clk/((16/(1+UT_BAUD[BAUD_SEL]))*(UT_BAUD+1));9600为所需波特率
	*	  0x9b：9600;
	********************************************************************************************
 	*/
	UT2_BAUD = 0x9b;              	//default baudrate:115200-0x0c,9600-0x9b,4800-0x137;2400-0x270;1200-0x4E1

 /**
	********************************************************************************************
	*	UART中断使能
	*	  0：不使能UART中断
	*	  1：使能UART中断
	********************************************************************************************
 	*/		
	SetBit(UT2_BAUD, UART2IEN);                      //ES0 发送/接受中断使能位

	EA = 1;                         //打开总中断

	/**接收数组******/
	Uart.R_DATA[0] = 0;
	Uart.R_DATA[1] = 0;
	Uart.R_DATA[2] = 0;
	Uart.R_DATA[3] = 0;
	Uart.R_DATA[4] = 0;
	Uart.R_DATA[5] = 0;
	Uart.R_DATA[6] = 0;
	Uart.R_DATA[7] = 0;
	Uart.R_DATA[8] = 0;
	Uart.R_DATA[9] = 0;

	/**发送数组******/
	Uart.T_DATA[0] = 0;
	Uart.T_DATA[1] = 0;
	Uart.T_DATA[2] = 0;
	Uart.T_DATA[3] = 0;
	Uart.T_DATA[4] = 0;
	Uart.T_DATA[5] = 0;
	Uart.T_DATA[6] = 0;
	Uart.T_DATA[7] = 0;
	Uart.T_DATA[8] = 0;
	Uart.T_DATA[9] = 0;

	/**定义全局变量******/
	Uart.Uredata = 0;
	Uart.UARxCnt = 0;
 
 
 
    Uart.SpeedRef = 0;
	Uart.ResponceFlag = 0;
 
	Uart.SendCnt = 0;
}

 /**
	* @function     UART_SendData
	* @brief        UART1数据发送函数
	*/
void UART_SendData(unsigned char T_Data)
{
	UT2_DR = T_Data;                //发送数据
}

 /**
	* @function     UartDealComm
	* @brief        设置UART1要发送的数据
	*/
void UartDealComm(void)
{
	uint16 j = 0;
	uint16 checkdate = 0x00;
	if (Uart.ResponceFlag == 1)
	{
		Uart.T_DATA[0] = 0xaa;     //设置要发送的数据
		Uart.T_DATA[1] = 0x00;
		Uart.T_DATA[2] = 1;
		Uart.T_DATA[3] = 2;
		Uart.T_DATA[4] = 3;
		Uart.T_DATA[5] = 0x00;
		Uart.T_DATA[6] = 0x00;
		Uart.T_DATA[7] = 0x00;
		for (j = 0; j < 7; j++)
		{
			checkdate += Uart.T_DATA[j];
		}
		Uart.T_DATA[8] = checkdate;
		Uart.T_DATA[9] = 0x55;
		Uart.UsaTxlen = 9;
		Uart.SendCnt = 0;
		UART_SendData(Uart.T_DATA[0]);	 //发送第一位数据
		Uart.ResponceFlag = 0;
	}
}



